/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package vista;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.swing.border.*;
import control.controladora;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

/**
 *
 * @author Ileana Natalia Díaz Palacios
 * Programación III
 * Universidad Nacional
 */

public final class vistaLogin extends JFrame implements MouseListener {
    
    //<editor-fold defaultstate="collapsed" desc="variables">
    
    // nombre de la persona, codigo del producto, marca, peso, año, estado, precio, cantidad
    private JTextField persona,codi,mark,pe,annio,esta,prec,canti;;
    private JPasswordField clave;
    private controladora gestor = null;
    private JPanel derecho, centro; 
    private JTextArea descrip;
    
    private JMenuBar menuPrincipal;
    private JMenu menuArchivo;
    private JMenuItem itemSalir;
    
    private FlowLayout disenio;

    //</editor-fold>
    
    public vistaLogin(controladora g) {
        construirPanelIzquierdo(getContentPane());
        this.addMouseListener(this);
   
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent we) {
                cerrarAplicacion();
            }
        });
        
        gestor = g;
    }

    void construirPanelIzquierdo(Container c) {

        ///////////////////Propiedades de la ventana principal/////////////
        this.setTitle("Login");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new BorderLayout(100, 30));
        
        disenio = new FlowLayout();
        disenio.setAlignment(FlowLayout.CENTER);
        c.setLayout(disenio);
        
        menuPrincipal = new JMenuBar();

        menuArchivo = new JMenu("Archivo");
        itemSalir = new JMenuItem("Salir");
        menuArchivo.add(itemSalir);
        menuPrincipal.add(menuArchivo);
        
        setJMenuBar(menuPrincipal);
        
        itemSalir.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                cerrarAplicacion();
            }

        });


        LineBorder border = new LineBorder(Color.LIGHT_GRAY, 2);

        ///////////////////////////Paneles//////////////////////////////////
        derecho = new JPanel();
        derecho.setBorder(BorderFactory.createEmptyBorder(10, 10, 250, 10));
        derecho.setLayout(new BoxLayout(derecho, BoxLayout.PAGE_AXIS));
        
        //propiedades para las casillas
        
        JLabel nombreUsuario = new JLabel("Nombre de usuario:");
        JLabel contrasena = new JLabel("Contraseña:");
        
        persona = new JTextField(0x1e);
        persona.setSize(10,5);
        persona.setMaximumSize(persona.getPreferredSize());
        clave = new JPasswordField(0x1e);
        clave.setSize(10,5);
        clave.setMaximumSize(clave.getPreferredSize());

        derecho.add(nombreUsuario);
        derecho.add(persona);
        derecho.add(contrasena);
        derecho.add(clave);
        
        c.add(derecho, BorderLayout.CENTER);
        
        //propiedades del boton para acceder 
        
        JButton acceso = new JButton("Acceder");
        derecho.add(acceso);
        acceso.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent ae) {
            //envia al controlador para que envie los datos al modeloLogin para que los busque en el archivo
              if(gestor.cargarArchivo(persona.getText(), clave.getText())){
                  derecho.removeAll();
                  derecho.updateUI();
                  construirVentanaArticulos(getContentPane());
              }
              else{
                  JOptionPane.showMessageDialog(null, "Alguno de los datos es inválido. Intente de nuevo");
              }
          }
        });

        setSize(500,600);
        setVisible(true);
    }
    
    public void construirVentanaArticulos(Container c){
    
        ///////////////////Propiedades de la ventana principal/////////////
        this.setTitle("Articulos");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new BorderLayout(100, 30));


        LineBorder border = new LineBorder(Color.LIGHT_GRAY, 2);

        ///////////////////////////Paneles//////////////////////////////////
        centro = new JPanel();
        centro.setBorder(BorderFactory.createEmptyBorder(10, 10, 250, 10));
        centro.setLayout(new BoxLayout(centro, BoxLayout.PAGE_AXIS));
        
        disenio = new FlowLayout();
        disenio.setAlignment(FlowLayout.CENTER);
        c.setLayout(disenio);
        
        // se colocan los articulos SOLO con su respectivo precio, al darle doble click se abre otra ventana
        // la cual muestra las caracteristicas del producto
        
        JLabel prueba = new JLabel("prueba para hacer funcionar el doble click");
        
        centro.add(prueba);
        
        // si doy doble click sobre el producto, me dirijo a la ConstruirVentanaCaracteristicas
        
        c.add(centro, BorderLayout.CENTER);
        
        //propiedades del boton para actualizar
        
        JButton actualizar = new JButton("Actualizar");
        centro.add(actualizar);
        actualizar.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent ae) {
            //debe refrescar la lista de productos
              
          }
        });

        setSize(500,600);
        setVisible(true);
    }
    
    public void construirVentanaCaracteristicas(Container c){
        
        ///////////////////Propiedades de la ventana principal/////////////
        this.setTitle("Características");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new BorderLayout(100, 30));


        LineBorder border = new LineBorder(Color.LIGHT_GRAY, 2);

        ///////////////////////////Paneles//////////////////////////////////
        centro = new JPanel();
        centro.setBorder(BorderFactory.createEmptyBorder(10, 10, 250, 10));
        centro.setLayout(new BoxLayout(centro, BoxLayout.PAGE_AXIS));
        
        disenio = new FlowLayout();
        disenio.setAlignment(FlowLayout.CENTER);
        c.setLayout(disenio);
        
        //<editor-fold defaultstate="collapsed" desc="labels">
        
        // se colocan los articulos con sus caracteristicas completas
        // con el siguiente orden 
        // cod, nombre, marca, peso, año, estado, descripcion, precio, cantidad actual
        
        JLabel cod = new JLabel("Código: ");
        JLabel nom = new JLabel("Nombre: ");
        JLabel marca = new JLabel("Marca: ");
        JLabel peso = new JLabel("Peso: ");
        JLabel anio = new JLabel("Año: ");
        JLabel estado = new JLabel("Estado: ");
        JLabel descripcion = new JLabel("Descripción del producto: ");
        JLabel precio = new JLabel("Precio: ");
        JLabel cant = new JLabel("Cantidad Actual: ");
        
        codi = new JTextField(0x1e);
        codi.setSize(10,5);
        codi.setMaximumSize(codi.getPreferredSize());
        codi.setEditable(false);
        
        persona = new JTextField(0x1e);
        persona.setSize(10,5);
        persona.setMaximumSize(persona.getPreferredSize());
        persona.setEditable(false);
        
        mark = new JTextField(0x1e);
        mark.setSize(10,5);
        mark.setMaximumSize(mark.getPreferredSize());
        mark.setEditable(false);
        
        pe = new JTextField(0x1e);
        pe.setSize(10,5);
        pe.setMaximumSize(pe.getPreferredSize());
        pe.setEditable(false);
        
        annio = new JTextField(0x1e);
        annio.setSize(10,5);
        annio.setMaximumSize(annio.getPreferredSize());
        annio.setEditable(false);
        
        esta = new JTextField(0x1e);
        esta.setSize(10,5);
        esta.setMaximumSize(esta.getPreferredSize());
        esta.setEditable(false);
        
        descrip = new JTextArea(5,30);
        descrip.setSize(10,5);
        descrip.setMaximumSize(descrip.getPreferredSize());
        descrip.setEditable(false);
        
        prec = new JTextField(0x1e);
        prec.setSize(10,5);
        prec.setMaximumSize(prec.getPreferredSize());
        prec.setEditable(false);
        
        canti = new JTextField(0x1e);
        canti.setSize(10,5);
        canti.setMaximumSize(canti.getPreferredSize());
        canti.setEditable(false);
                
        //codi,persona,mark,pe,annio,esta,descrip,prec,canti;
        
        centro.add(cod);
        centro.add(codi);
        centro.add(nom);
        centro.add(persona);
        centro.add(marca);
        centro.add(mark);
        centro.add(peso);
        centro.add(pe);
        centro.add(anio);
        centro.add(annio);
        centro.add(estado);
        centro.add(esta);
        centro.add(descripcion);
        centro.add(descrip);
        centro.add(precio);
        centro.add(prec);
        centro.add(cant);
        centro.add(canti);
        
        //</editor-fold>
        
        c.add(centro, BorderLayout.CENTER);
        
        //propiedades del boton comprar

        JButton comprar = new JButton("Comprar");
        centro.add(comprar);
        comprar.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent ae) {
            //debe dirigirse a la ventana compra
              centro.removeAll();
              centro.updateUI();
              construirVentanaCompra(getContentPane());
          }
        });
        
        //propiedades del boton actualizar
        
        JButton actualizar = new JButton("Actualizar");
        centro.add(actualizar);
        actualizar.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent ae) {
            //debe refrescar la lista de productos
              
          }
        });

        setSize(500,600);
        setVisible(true);
    }
    
    public void construirVentanaCompra(Container c){
         ///////////////////Propiedades de la ventana principal/////////////
        this.setTitle("Compra");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new BorderLayout(100, 30));

        
        LineBorder border = new LineBorder(Color.LIGHT_GRAY, 2);

        ///////////////////////////Paneles//////////////////////////////////
        centro = new JPanel();
        centro.setBorder(BorderFactory.createEmptyBorder(10, 10, 250, 10));
        centro.setLayout(new BoxLayout(centro, BoxLayout.PAGE_AXIS));
        
        disenio = new FlowLayout();
        disenio.setAlignment(FlowLayout.CENTER);
        c.setLayout(disenio);
        
        // se presenta la cantidad de articulos a comprar
        // se muestra el total de la compra
        
        JLabel cantidadCompra = new JLabel("Cantidad a comprar: ");
        JTextField cantidad = new JTextField("0");
        
        JLabel totalCompra = new JLabel("Total a pagar: ");
        JLabel total = new JLabel("CRC ");
        JTextField pagar = new JTextField("");
        pagar.setEditable(false);
        

        centro.add(cantidadCompra);
        centro.add(cantidad);
        centro.add(totalCompra);
        centro.add(total);
        centro.add(pagar);
        
        c.add(centro, BorderLayout.CENTER);
        
        //propiedades del boton comprar

        JButton aceptar = new JButton("Realizar Compra");
        centro.add(aceptar);
        aceptar.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent ae) {
              JOptionPane.showMessageDialog(null, "Gracias por su compra");
              centro.removeAll();
              centro.updateUI();
              construirPanelIzquierdo(getContentPane());
            //se verifica la existencia del producto. Si el usuario desea comprar más de lo que hay en existencia
              // debe mostrarse un error en la compra e indicarle la cantidad del producto
//              if(){ // la cantidad está dentro del rango existente de productos, se realiza la compra
//                  
//              }
//              else{ // se muestra un mensaje de error y se le indica al usuario que debe colocar la cantidad que haya
//                  construirVentanaCompra();
//              }
              
          }
        });
    }
    
    public void cerrarAplicacion() {
        if (confirmar("Desea cerrar la aplicación?")) {
            gestor.cerrarAplicacion();
        }
    }
    
    public boolean confirmar(String mensaje) {
        return JOptionPane.showConfirmDialog(this, mensaje, "Confirmación",
                JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION;
    }
    
    @Override
    public void mouseClicked(MouseEvent evt) {
        if (evt.getClickCount() == 2) {
              //se envia a la ventana construirVentanaCaracteristicas();
              centro.removeAll();
              centro.updateUI();
              construirVentanaCaracteristicas(getContentPane());
        } 
    }

    @Override
    public void mousePressed(MouseEvent e) {
    }

    @Override
    public void mouseReleased(MouseEvent e) {
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e) {
    }
    
    
}

